monorepo & turbo
将多个项目存放在同一个 git 仓库中,将项目放入不同的工作区,各个工作区之间互相引用模块,实现代码共享。
monorepo 文件结构
前端项目使用包管理器管理 monorepo。
1 | my-monorepo |
如果将docs、 apps 和packages 下的所有目录设为工作区,需要在根目录如下设置
npm
在根目录的 package.json 文件中配置 workspaces 字段。在workspaces 中配置工作区列表。
1 | { |
yarn
在根目录的 package.json 文件中配置 workspaces 字段。在workspaces 中配置工作区列表。
1 | { |
pnpm
在根目录的 pnpm-workspace.yaml 文件中配置工作区列表。
1 | packages: |
添加工作区依赖
在某个工作区将另一个工作区作为依赖项,需要在其package.json 指明:
npm
1 | { |
yarn
1 | { |
pnpm
1 | { |
原理解释
在根目录执行npm install 后,npm 会在根目录和每个工作区下载依赖包到 node_modules , 当遇到工作区依赖后,会将工作区符号链接到node_modules, 所以可以将其当做普通依赖一样正常导入。
使用 Turborepo 管理 monorepo
Turborepo 是一个在包管理器提供的monorepo 管理功能之上,提供了更方便并且性能更好的构建系统。
使用 Turborepo只要在根目录安装turbo, 同时在根目录下添加turbo.json 即可开始使用
1 | { |
当运行 turbo lint 时,Turborepo 会查看每个工作区中的每个 lint 脚本并运行它。
turbo.json 主要配置
1 | // turbo.json |
monorepo & turbo